﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using SWBetongXaydung.GUI.Common;
using SWBetongXaydung.BLL;
using SWBetongXaydung.DAL;
using SWBetongXaydung.GUI.Utils;
using SWBetongXaydung.Utils;
using System.Xml.Linq;
namespace SWBetongXaydung.GUI.TacNghiep
{
    public partial class UCCapBeTong : BaseUserControl
    {
        bool allowUpdate = false;
        bool isAddNew = true;
        XElement xelement;
        string EleNameRuaXe = "ruaxe";
        string EleNameBetong = "betong";
        string EleNameChuyenTram = "chuyentram";
        bool isEditing = false;
        BETONGXAYDUNGEntities _dbContext = null;

        public BETONGXAYDUNGEntities DBContext
        {
            get
            {
                //return null;
                //if (_dbContext == null)
                //    _dbContext = DBContextHelper.GetContext();
                return _dbContext;

            }
        }

        void InitButton()
        {
            btnXoa.Enabled = btnHieuChinh.Enabled = false;
            dtNgayCap.Enabled = cmbTramCap.Enabled = cmbNoiDen.Enabled = nSoPhieu.Enabled = false;
            btnThem.Enabled = true;
            btnLuu.Enabled = btnBoQua.Visible = false;
            dgDieuXe.Enabled = dgHanhTrinh.Enabled = true;
            chkLoc.Enabled = true;
            if (chkLoc.Checked)
                cmbThang.Enabled = cmbNam.Enabled = true;
            else
                cmbThang.Enabled = cmbNam.Enabled = false;
            var hT = bdHanhTrinh.Current as HanhTrinh;
            if (hT != null)
                btnXoa.Enabled = btnHieuChinh.Enabled = true;
        }

        void InitGridDinhMucNhienLieu()
        {
            dgDinhMucNhienLieu.AutoGenerateColumns = false;
            colDinhMucLoaiXe.DataPropertyName = "TenLoaiXe";
            colDinhmucDinhMuc.DataPropertyName = "DinhMucNhienLieu";
        }

        void InitGridDieuXe()
        {
            dgDieuXe.AutoGenerateColumns = false;
            colSoXe.DataPropertyName = "SoXe";
            colHoTen.DataPropertyName = "TenDayDu";
            colSoChuyen.DataPropertyName = "SoChuyen";
            colNhienLieu.DataPropertyName = "DinhMucNhienLieu";
            colGhiChu.DataPropertyName = "GhiChu";
            colDoiTaiXe.DataPropertyName = "DoiTaiXe";
            colTong.DataPropertyName = "Tong";
        }

        void InitGridHanhTrinh()
        {
            dgHanhTrinh.AutoGenerateColumns = false;
            colNgayCap.DataPropertyName = "Ngay";
            dgHanhTrinh.Columns["colNgayCap"].DefaultCellStyle.Format = "dd/MM/yyyy";
            colSoPhieu.DataPropertyName = "SoPhieu";
            colDienGiai.DataPropertyName = "DienGiai";
        }

        public UCCapBeTong()
        {
            InitializeComponent();
            InitGridDieuXe();
            InitGridDinhMucNhienLieu();
            InitGridHanhTrinh();
            try
            {
                xelement = XElement.Load("Config.xml");
            }
            catch
            {
                xelement = null;
            }
            chkLoc.Checked = true;
            cmbNam.Text = DateTime.Now.Year.ToString();
            cmbThang.Text = DateTime.Now.Month.ToString();
            LoadTramCap();
            LoadNoiDen();
            LoadHanhTrinh();
            InitButton();
        }

        void LoadNoiDen()
        {
            allowUpdate = false;
            cmbNoiDen.DataSource = HanhTrinhBLL.GetListNoiDen(DBContext);
            cmbNoiDen.DisplayMember = "NoiDen";
            allowUpdate = true;
        }

        /// <summary>
        /// Nạp danh sách trạm cấp
        /// </summary>
        void LoadTramCap()
        {
            allowUpdate = false;
            cmbTramCap.DataSource = TramCapBLL.GetList(DBContext);
            cmbTramCap.DisplayMember = "TenTramCap";
            cmbTramCap.ValueMember = "IDTramCap";
            allowUpdate = true;
        }

        /// <summary>
        /// Nạp danh sách hành trình
        /// </summary>
        void LoadHanhTrinh()
        {
            allowUpdate = false;
            bdHanhTrinh.DataSource = null;
            if (chkLoc.Checked)
                bdHanhTrinh.DataSource = HanhTrinhBLL.GetList(int.Parse(cmbThang.Text), int.Parse(cmbNam.Text), DBContext);
            else
                bdHanhTrinh.DataSource = HanhTrinhBLL.GetList(0, 0, DBContext);
            dgHanhTrinh.DataSource = bdHanhTrinh;
            LoadDinhMucNhienLieu();
            LoadDieuXe();
        }

        /// <summary>
        /// Nạp danh sách định mức nhiên liệu
        /// </summary>
        void LoadDinhMucNhienLieu()
        {
            var list = LoaiXeBLL.GetList();
            var ht = bdHanhTrinh.Current as HanhTrinh;
            if (ht != null)
            {
                for (int i = 0; i < list.Count; i++)
                    list[i].DinhMucNhienLieu = (i == 0) ? (ht.DinhMucXeLon.HasValue ? ht.DinhMucXeLon.Value : 0) : (ht.DinhMucXeNho.HasValue ? ht.DinhMucXeNho.Value : 0);
            }
            bdDinhMucNhienLieu.DataSource = list;
            dgDinhMucNhienLieu.DataSource = bdDinhMucNhienLieu;
        }

        decimal[] GetDinhMucNhienLieuFromGrid()
        {
            decimal[] rs = new decimal[2];
            var list = bdDinhMucNhienLieu.DataSource as List<LoaiXe>;
            if (list != null && list.Count > 0)
            {
                rs[0] = list[0].DinhMucNhienLieu;
                rs[1] = list[1].DinhMucNhienLieu;
            }
            return rs;
        }

        void LoadDieuXe()
        {
            var hanhTrinh = bdHanhTrinh.Current as HanhTrinh;
            bdDieuXe.DataSource = null;
            if (hanhTrinh != null)
            {
                var IDHanhTrinh = hanhTrinh.IDHanhTrinh;
                List<DieuXeHanhTrinh> list = new List<DieuXeHanhTrinh>();
                var bangPhanCongLaiXe = PhanCongLaiXeBLL.GetList(0, 0, DBContext);
                var bangDieuXe = DieuXeBLL.GetList(IDHanhTrinh);
                var listDinhMucNhienLieu = bdDinhMucNhienLieu.DataSource as List<LoaiXe>;
                if (bangPhanCongLaiXe != null && bangPhanCongLaiXe.Count > 0)
                {
                    foreach (var pc in bangPhanCongLaiXe)
                    {
                        DieuXeHanhTrinh item = new DieuXeHanhTrinh();
                        //var rs = list.Find(e => e.SoXe == pc.SoXe && e.IDTaiXe == pc.IDTaiXe);
                        //if (rs == null)
                        //{
                        item.ID = -1;
                        item.SoXe = pc.SoXe;
                        item.IDTaiXe = pc.IDTaiXe;
                        var xe = XeBLL.GetXe(pc.SoXe, DBContext);
                        if (xe != null)
                        {
                            var loaiXe = listDinhMucNhienLieu.Find(t => t.IDLoaiXe == xe.IDLoaiXe);
                            if (loaiXe != null)
                                item.DinhMucNhienLieu = loaiXe.DinhMucNhienLieu;
                            else
                                item.DinhMucNhienLieu = 0;
                        }
                        list.Add(item);
                        //}
                    }
                }
                if (bangDieuXe != null && bangDieuXe.Count > 0)
                    foreach (var dieuXe in bangDieuXe)
                    {
                        var rs = list.Find(e => e.SoXe == dieuXe.SoXe && e.IDTaiXe == dieuXe.IDTaiXe);
                        if (rs == null)
                        {
                            DieuXeHanhTrinh item = new DieuXeHanhTrinh();
                            item.ID = dieuXe.ID;
                            item.IDTaiXe = dieuXe.IDTaiXe;
                            item.SoXe = dieuXe.SoXe;
                            item.SoChuyen = dieuXe.SoChuyen;
                            item.DinhMucNhienLieu = dieuXe.DinhMucNhienLieu;
                            list.Add(item);
                        }
                        else
                        {
                            rs.ID = dieuXe.ID;
                            rs.IDTaiXe = dieuXe.IDTaiXe;
                            rs.SoXe = dieuXe.SoXe;
                            rs.SoChuyen = dieuXe.SoChuyen;
                            rs.DinhMucNhienLieu = dieuXe.DinhMucNhienLieu;
                        }
                    }

                bdDieuXe.DataSource = list;
            }
            dgDieuXe.DataSource = bdDieuXe;
            UpdateInformationDieuXe();
            allowUpdate = true;
        }

        private void bdHanhTrinh_CurrentChanged(object sender, EventArgs e)
        {
            if (allowUpdate)
                try
                {
                    var hanhTrinh = bdHanhTrinh.Current as HanhTrinh;
                    if (hanhTrinh != null)
                    {
                        btnXoa.Enabled = btnHieuChinh.Enabled = true;
                        dtNgayCap.Value = hanhTrinh.Ngay;
                        nSoPhieu.Value = (decimal)hanhTrinh.SoPhieu;
                        cmbTramCap.SelectedValue = hanhTrinh.IDTramCap;
                        cmbNoiDen.Text = hanhTrinh.NoiDen;
                        LoadDinhMucNhienLieu();
                        lblThongTin.Text = hanhTrinh.Ngay.ToShortDateString() + " - " + hanhTrinh.DienGiai;
                        chkTranhThue.Checked = (hanhTrinh.TinhTrang == 2) ? true : false;
                    }
                    else
                    {
                        btnXoa.Enabled = btnHieuChinh.Enabled = false;
                        lblThongTin.Text = "";
                    }
                    LoadDieuXe();
                }
                catch
                {
                    btnXoa.Enabled = btnHieuChinh.Enabled = false;
                    LoadDieuXe();
                }
        }

        private void dgDieuXe_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
        {

            if (e.ColumnIndex == dgDieuXe.Columns["colSoChuyen"].Index)
            {
                int i;
                if (string.IsNullOrEmpty(e.FormattedValue.ToString()) || !int.TryParse(Convert.ToString(e.FormattedValue), out i))
                {
                    e.Cancel = true;
                    DialogUtils.ShowError("Bạn phải nhập số");
                }
            }
        }

        private void dgDinhMucNhienLieu_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
        {
            try
            {
                if (e.ColumnIndex == dgDinhMucNhienLieu.Columns["colDinhmucDinhMuc"].Index)
                {
                    double i;
                    if (!string.IsNullOrEmpty(e.FormattedValue.ToString()) && !double.TryParse(Convert.ToString(e.FormattedValue), out i))
                    {
                        e.Cancel = true;
                        DialogUtils.ShowError("Bạn phải nhập số");
                    }

                }
            }
            catch
            {
                e.Cancel = true;
            }
        }

        private void btnThem_Click(object sender, EventArgs e)
        {
            isEditing = true;
            btnThem.Enabled = btnHieuChinh.Enabled = btnXoa.Enabled = false;
            btnLuu.Enabled = btnBoQua.Visible = true;
            chkLoc.Enabled = false;
            dgHanhTrinh.Enabled = false;
            dgDieuXe.Enabled = false;
            dtNgayCap.Enabled = cmbTramCap.Enabled = cmbNoiDen.Enabled = nSoPhieu.Enabled = true;
            cmbThang.Enabled = cmbNam.Enabled = false;
            dtNgayCap.Focus();
            isAddNew = true;
        }

        private void btnHieuChinh_Click(object sender, EventArgs e)
        {
            isEditing = true;
            btnThem.Enabled = btnHieuChinh.Enabled = btnXoa.Enabled = false;
            btnLuu.Enabled = btnBoQua.Visible = true;
            chkLoc.Enabled = false;
            dgHanhTrinh.Enabled = false;
            dgDieuXe.Enabled = false;
            dtNgayCap.Enabled = cmbTramCap.Enabled = cmbNoiDen.Enabled = nSoPhieu.Enabled = true;
            cmbThang.Enabled = cmbNam.Enabled = false;
            dtNgayCap.Focus();
            isAddNew = false;
        }

        bool Validate_Data()
        {
            errorNotify.Clear();
            if (cmbNoiDen.Text.IsNullOrEmpty())
            {
                errorNotify.SetError(cmbNoiDen, "Bạn chưa nhập nơi đến");
                cmbNoiDen.Focus();
                return false;
            }
            if (cmbTramCap.SelectedIndex == -1)
            {
                errorNotify.SetError(cmbTramCap, "Bạn chưa chọn trạm cấp");
                cmbTramCap.Focus();
                return false;
            }
            return true;
        }

        private void btnLuu_Click(object sender, EventArgs e)
        {
            /*
                * Nếu T Thuế là true thì đây là hành trình được thêm vào dạng kê Khống để tránh thuế
                * Những hành trình này sẽ không xuất hiện trong danh sách hành trình của tài xế
            */
            bool isSuccess = false;
            if (Validate_Data())
            {
                if (isAddNew)
                {
                    //Thêm
                    HanhTrinh ht = new HanhTrinh();
                    ht.IDTramCap = int.Parse(cmbTramCap.SelectedValue.ToString());
                    ht.Ngay = dtNgayCap.Value.Date;
                    ht.NoiDen = cmbNoiDen.Text;
                    ht.SoPhieu = (int)nSoPhieu.Value;
                    var dm = GetDinhMucNhienLieuFromGrid();
                    ht.DinhMucXeLon = dm[0];
                    ht.DinhMucXeNho = dm[1];
                    /*
                     * Nếu T Thuế là true thì đây là hành trình được thêm vào dạng kê Khống để tránh thuế
                     * Những hành trình này sẽ không xuất hiện trong danh sách hành trình của tài xế
                     */
                    ht.TinhTrang = chkTranhThue.Checked ? 2 : 0;
                    var rs = HanhTrinhBLL.Add(ht, DBContext);
                    if (rs == CODE_RESULT_RETURN.MaTrung)
                        DialogUtils.ShowError("Bạn đã thêm hành trình này trong hệ thống");
                    else
                    {
                        isSuccess = true;
                    }
                }
                else
                {
                    //Cập nhật
                    var current = bdHanhTrinh.Current as HanhTrinh;
                    if (current != null)
                    {
                        HanhTrinh ht = new HanhTrinh();
                        ht.IDHanhTrinh = current.IDHanhTrinh;
                        ht.IDTramCap = int.Parse(cmbTramCap.SelectedValue.ToString());
                        ht.Ngay = dtNgayCap.Value.Date;
                        ht.NoiDen = cmbNoiDen.Text;
                        ht.SoPhieu = (int)nSoPhieu.Value;
                        ht.TinhTrang = chkTranhThue.Checked ? 2 : 0;
                        var dm = GetDinhMucNhienLieuFromGrid();
                        ht.DinhMucXeLon = dm[0];
                        ht.DinhMucXeNho = dm[1];
                        var rs = HanhTrinhBLL.Update(ht, DBContext);
                        if (rs == CODE_RESULT_RETURN.ThatBai)
                            DialogUtils.ShowError("Cập nhật thất bại");
                        else
                        {
                            isSuccess = true;
                        }
                    }
                }
                if (isSuccess)
                {
                    InitButton();
                    LoadHanhTrinh();
                }
                isEditing = false;
            }
        }

        private void btnBoQua_Click(object sender, EventArgs e)
        {
            InitButton();
        }

        private void chkLoc_CheckedChanged(object sender, EventArgs e)
        {
            if (allowUpdate)
            {
                if (chkLoc.Checked)
                {
                    if (cmbThang.Text.IsNullOrEmpty())
                        cmbThang.Text = DateTime.Now.Date.Month.ToString();
                    if (cmbNam.Text.IsNullOrEmpty())
                        cmbNam.Text = DateTime.Now.Year.ToString();
                    cmbThang.Enabled = cmbNam.Enabled = true;
                    LoadHanhTrinh();
                }
                else
                {
                    cmbThang.Enabled = cmbNam.Enabled = false;
                    LoadHanhTrinh();
                }
            }
        }

        private void dgDieuXe_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex >= 0 && e.ColumnIndex == colDoiTaiXe.Index)
            {
                var current = bdDieuXe.Current as DieuXeHanhTrinh;
                if (current != null)
                {
                    FormDoiTaiXe frm = new FormDoiTaiXe(current.SoXe);
                    if (frm.ShowDialog() == DialogResult.OK)
                    {
                        current.IDTaiXe = frm.IDTaiXe;
                        var rs = AddOrUpdateDieuXe(current);
                        if (rs == CODE_RESULT_RETURN.ThatBai)
                            DialogUtils.ShowError("Không thể cập nhật");
                        else
                        {
                            UpdateInformationDieuXe();
                            dgDieuXe.Refresh();
                        }
                        frm.Dispose();
                    }
                    else
                        frm.Dispose();
                }
            }
        }

        private void cmbNoiDen_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Enter)
                btnLuu.PerformClick();
        }

        private void dgDieuXe_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            var current = bdDieuXe.Current as DieuXeHanhTrinh;
            if (current != null)
            {
                var rs = AddOrUpdateDieuXe(current);
                if (rs == CODE_RESULT_RETURN.ThatBai)
                    DialogUtils.ShowError("Không thể cập nhật");
                else
                {
                    UpdateInformationDieuXe();
                }
            }
        }

        private void dgDinhMucNhienLieu_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            if (allowUpdate)
            {
                if (!isEditing)
                {
                    var listDinhMucNhienLieu = bdDinhMucNhienLieu.DataSource as List<LoaiXe>;
                    var listDieuXe = bdDieuXe.DataSource as List<DieuXeHanhTrinh>;
                    var ht = bdHanhTrinh.Current as HanhTrinh;
                    LoaiXe lx = bdDinhMucNhienLieu.Current as LoaiXe;
                    if (listDinhMucNhienLieu != null &&
                        listDinhMucNhienLieu.Count > 0 &&
                        listDieuXe != null &&
                        listDieuXe.Count > 0 &&
                        lx != null &&
                        ht != null)
                    {
                        if (lx.IDLoaiXe == 1)
                            ht.DinhMucXeLon = lx.DinhMucNhienLieu;
                        else
                            ht.DinhMucXeNho = lx.DinhMucNhienLieu;
                        HanhTrinhBLL.Update(ht, DBContext);
                        for (int i = 0; i < listDieuXe.Count; i++)
                        {
                            var xe = XeBLL.GetXe(listDieuXe[i].SoXe, DBContext);
                            if (lx.IDLoaiXe == xe.IDLoaiXe)
                            {
                                listDieuXe[i].DinhMucNhienLieu = decimal.Parse(lx.DinhMucNhienLieu.ToString());
                                AddOrUpdateDieuXe(listDieuXe[i]);
                            }
                        }
                        bdDieuXe.DataSource = listDieuXe;
                        dgDieuXe.Refresh();
                        dgHanhTrinh.Refresh();
                    }
                }
            }
        }

        CODE_RESULT_RETURN AddOrUpdateDieuXe(DieuXeHanhTrinh dxht)
        {
            var hanhTrinh = bdHanhTrinh.Current as HanhTrinh;
            if (hanhTrinh == null)
            {
                DialogUtils.ShowError("Bạn chưa chọn hành trình");
                return CODE_RESULT_RETURN.ThatBai;
            }
            if (dxht.ID == -1)
            {
                var dinhMucRuaXe = GetDinhMucNhienLieuFromXML(EleNameRuaXe);
                var dinhMucChuyenTram = GetDinhMucNhienLieuFromXML(EleNameChuyenTram);
                var idLoaiXe = XeBLL.GetXe(dxht.SoXe, DBContext).IDLoaiXe - 1;
                return DieuXeBLL.Add(new DieuXe
                 {
                     IDHanhTrinh = hanhTrinh.IDHanhTrinh,
                     SoXe = dxht.SoXe,
                     IDTaiXe = (int)dxht.IDTaiXe,
                     SoChuyen = dxht.SoChuyen,
                     DinhMucNhienLieu = dxht.DinhMucNhienLieu
                 }, dinhMucRuaXe[idLoaiXe], dinhMucChuyenTram[idLoaiXe]);
            }
            else
            {
                DieuXe dx = new DieuXe
                 {
                     ID = dxht.ID,
                     IDHanhTrinh = hanhTrinh.IDHanhTrinh,
                     SoXe = dxht.SoXe,
                     IDTaiXe = (int)dxht.IDTaiXe,
                     SoChuyen = dxht.SoChuyen,
                     DinhMucNhienLieu = dxht.DinhMucNhienLieu
                 };
                return DieuXeBLL.Update(dx, DBContext);
            }
        }

        void UpdateInformationDieuXe()
        {
            var list = bdDieuXe.DataSource as List<DieuXeHanhTrinh>;
            if (list != null && list.Count > 0)
            {
                lbSoXeThamGia.Text = list.Count(t => t.SoChuyen > 0).ToString();
                lbSoChuyen.Text = list.Sum(t => t.SoChuyen).ToString();
                //lbSoLit.Text = list.Where(t => t.SoChuyen > 0).Sum(t => t.DinhMucNhienLieu).ToString();
                lbSoLit.Text = list.Where(t => t.SoChuyen > 0).Sum(t => t.Tong).ToString();
            }
            else
            {
                lbSoXeThamGia.Text = "0";
                lbSoChuyen.Text = "0";
                //lbSoLit.Text = list.Where(t => t.SoChuyen > 0).Sum(t => t.DinhMucNhienLieu).ToString();
                lbSoLit.Text = "0";
            }
        }

        private void btnXoa_Click(object sender, EventArgs e)
        {
            var current = bdHanhTrinh.Current as HanhTrinh;
            if (current != null)
            {
                if (DialogUtils.ShowYesNo("Bạn có chắc muốn xóa") == DialogResult.Yes)
                {
                    var rs = HanhTrinhBLL.Delete((int)current.IDHanhTrinh, DBContext);
                    if (rs == CODE_RESULT_RETURN.ThatBai)
                        DialogUtils.ShowError("Không thể xóa hành trình này");
                    else
                        bdHanhTrinh.RemoveCurrent();
                }
            }
        }

        private void cmbThang_Validating(object sender, CancelEventArgs e)
        {
            int o = 0;
            if (!int.TryParse(((ComboBox)sender).Text, out o))
            {
                e.Cancel = true;
                DialogUtils.ShowError("Vui lòng nhập tháng đúng");
            }
        }

        private void cmbThang_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (allowUpdate)
                LoadHanhTrinh();
        }

        private void cmbNam_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (allowUpdate)
                LoadHanhTrinh();
        }

        private void cmbNam_Validating(object sender, CancelEventArgs e)
        {
            int o = 0;
            if (!int.TryParse(((ComboBox)sender).Text, out o))
            {
                e.Cancel = true;
                DialogUtils.ShowError("Vui lòng nhập tháng đúng");
            }
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="id">
        /// id = "ruaxe"
        /// id = "betong"
        /// id = "chuyentram"
        /// </param>
        /// <returns></returns>
        int[] GetDinhMucNhienLieuFromXML(string id)
        {
            if (xelement != null)
            {
                var name = (from nm in xelement.Elements("dinhmucnhienlieu")
                            where nm.Attribute("id").Value == id
                            select nm).SingleOrDefault();
                if (name != null)
                {
                    List<int> ls = new List<int>();
                    foreach (XElement xEle in name.Elements())
                    {
                        ls.Add(int.Parse(xEle.Value));
                    }
                    return ls.ToArray();
                }
                else
                    return new int[2] { 0, 0 };
            }
            else
            {
                return new int[2] { 0, 0 };
            }
        }

        //private void UpdateNhienLieuChoBang()
        //{
        //    var ls = bdDieuXe.DataSource as List<DieuXeHanhTrinh>;
        //    if (ls != null && ls.Count > 0)
        //    {
        //        var lsLoaiXe = bdDinhMucNhienLieu.DataSource as List<LoaiXe>;
        //        if (lsLoaiXe != null && ls.Count > 0)
        //        {
        //            foreach (var item in lsLoaiXe)
        //            {
        //                var dieuXeHanhTrinh = ls.Where(t => t.GhiChu == item.TenLoaiXe).OrderByDescending(t => t.DinhMucNhienLieu).GroupBy(t => t.GhiChu, (key, g) => new { TenLoaiXe = key, NhienLieu = g.FirstOrDefault().DinhMucNhienLieu }).FirstOrDefault();
        //                if (dieuXeHanhTrinh != null)
        //                {
        //                    item.DinhMucNhienLieu = dieuXeHanhTrinh.NhienLieu;
        //                }
        //            }
        //        }
        //    }
        //    dgDinhMucNhienLieu.Refresh();
        //}

        private void cmbNoiDen_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (allowUpdate)
            {
                var noiDen = cmbNoiDen.Text;
                var ht = HanhTrinhBLL.Get(noiDen);
                if (ht != null)
                {
                    var dsDinhMuc = bdDinhMucNhienLieu.DataSource as List<LoaiXe>;
                    if (dsDinhMuc != null && dsDinhMuc.Count > 0)
                    {
                        //Xe lớn
                        dsDinhMuc[0].DinhMucNhienLieu = ht.DinhMucXeLon.HasValue ? ht.DinhMucXeLon.Value : 0;
                        //Xe nhỏ
                        dsDinhMuc[1].DinhMucNhienLieu = ht.DinhMucXeNho.HasValue ? ht.DinhMucXeNho.Value : 0;
                    }
                    dgDinhMucNhienLieu.Refresh();
                }
            }
        }

        private void UCCapBeTong_ControlRemoved(object sender, ControlEventArgs e)
        {
            if (_dbContext != null)
                _dbContext.Dispose();
        }

        private void btnRutgonHanhTrinh_Click(object sender, EventArgs e)
        {
            var current = bdHanhTrinh.Current as HanhTrinh;
            if (current != null)
            {
                current.TinhTrang = 1;
                var rs = HanhTrinhBLL.Update(current, DBContext);
                if (rs == CODE_RESULT_RETURN.ThatBai)
                    DialogUtils.ShowError("Cập nhật thất bại");
                else
                {
                    DialogUtils.ShowMessage("Rút gọn thành công");
                    dgHanhTrinh.Refresh();
                }
            }
        }

    }
    class DieuXeHanhTrinh
    {
        public long ID { get; set; }
        public string SoXe { get; set; }
        public long IDTaiXe { get; set; }
        public string TenDayDu
        {
            get
            {
                var taiXe = TaiXeBLL.GetTaiXe(IDTaiXe);
                if (taiXe != null)
                    return taiXe.TenDayDu;
                else
                    throw new Exception("Không tồn tại tài xế này: " + IDTaiXe);
            }
        }
        public int SoChuyen { get; set; }
        public decimal DinhMucNhienLieu { get; set; }
        public decimal Tong { get { return SoChuyen * DinhMucNhienLieu; } }
        public string GhiChu
        {
            get
            {
                var xe = XeBLL.GetXe(SoXe);
                if (xe != null)
                {
                    var loaiXe = LoaiXeBLL.GetLoaiXe(xe.IDLoaiXe);
                    if (loaiXe != null)
                        return loaiXe.TenLoaiXe;
                    else
                        throw new Exception("Loại xe " + xe.IDLoaiXe + " không tồn tại");
                }
                else
                    throw new Exception("Xe " + SoXe + " không tồn tại");
            }
        }
        public string DoiTaiXe { get { return "Đổi tài xế"; } }
    }
}
